# -*- coding: utf-8 -*-
"""
Created on Thu Sep 27 22:11:57 2018

@author: cheny
"""

#list内置函数
a = [1,2,3,4]
print(a)
a.append(100) #在末尾追加
print(a)
last_data = a.pop() #删除最后一个元素并返回该值
print(last_data)
print(a)

b = []
print(b)
# b.pop()  #空列表再pop会报错

a.insert(2,50)  #在index位置插入value值
print(a)

b.insert(5,100) #当index范围超过时，插入没有报错
b.insert(-2,200)    #下标为负数也是可以的
print(b)

b.remove(200)   #删除指定元素
print(b)
#b.remove(300)   #删除不存在的数会报错
#改正方法一：
if 200 in b:
    b.remove(200)
else:
    print("200 is not in b")

#修正方法二：
try:
    b.remove(200)
except:
    print("200 is not in b")

print(b)
b.clear()   #清空列表数据，但是列表还是原来的列表
print(b)

print(a)
a.reverse() #倒序翻转
print(a)

a.sort()
print(a)    #排序
a.sort(reverse = True)
print(a)    #排序

b = [9,8,7,6,5,5]
print("b -->", id(b))
a.extend(b) # 把一个列表拼到另一个列表上
print(a)
print("a.extend -->",id(a))
a = a+b  #等价于这段代码
print("a+ -->", id(a))


cc1 = a.count(910)   #查找列表中指定值的个数
cc2 = a.count(5)
print(cc1,cc2)

index1 = a.index(3) #返回值在列表中的下标
print("index1 = ", index1)
# index2 = a.index(999)   #当值不在列表里时会报错



c = a.copy()    #拷贝列表
d = a
#与 c = a 的区别，copy是在内存里拷贝一个list，而 c= a则只拷贝了地址
print("a -->",a)
print("c -->",c)
print("d -->",d)
print(id(a))
print(id(c)) #id变了
print(id(d)) #id和a相同

print("===============================")
#浅拷贝

a = [1,2,3,[10,20,30]]
b = a.copy()
print(id(a))
print(id(b))
print(id(a[3]))
print(id(b[3]))
a[3][2] = 100
print(a)
print(b)

import copy
a = [1,2,3,[10,20,30]]
c = copy.deepcopy(a)
print(id(a))
print(id(c))
print(id(a[3]))
print(id(c[3]))
a[3][2] = 100
print(a)
print(c)

#元组 tuple  不可更改的list
t = ()  #创建空元组
print(type(t))
t1 = (1,)    #创建只有一个元素的元组，则一定要加一个逗号
t2 = (1)     #int型
print(type(t1))
print(type(t2)) 
t3 = 1,     #这种写法也不会报错，也是创建元组
print(type(t3)) 

#创建多个值的元组
t4 = (1,2,3,4,5)
t5 = 1,2,3,4,5
print(type(t5))

l = [1,2,3,4,5]
t = tuple(l)
print(type(t))
















 
